// lib/models/stats.dart
import 'package:json_annotation/json_annotation.dart';

part 'stats.g.dart';

/**
 * 帖子统计数据模型
 * 用于存储和管理帖子的各种互动统计信息和时间记录
 * 使用json_serializable进行JSON序列化和反序列化
 */
@JsonSerializable(
  explicitToJson: true,         // 显式生成toJson方法
  includeIfNull: false,         // 不包含null值字段
  checked: true,                // 启用检查模式确保类型安全
)
class Stats {
  @JsonKey(name: 'post_id')
  final int? postId; // 关联的帖子ID，对应后端的post_id字段

  @JsonKey(name: 'view_count', defaultValue: 0)
  final int viewCount; // 帖子查看次数

  @JsonKey(name: 'like_count', defaultValue: 0)
  final int likeCount; // 帖子点赞次数

  @JsonKey(name: 'collect_count', defaultValue: 0)
  final int collectCount; // 帖子收藏次数

  @JsonKey(name: 'comment_count', defaultValue: 0)
  final int commentCount; // 帖子评论次数

  @JsonKey(name: 'last_viewed_at')
  final DateTime? lastViewedAt; // 最后查看时间

  @JsonKey(name: 'last_liked_at')
  final DateTime? lastLikedAt; // 最后点赞时间

  @JsonKey(name: 'last_collected_at')
  final DateTime? lastCollectedAt; // 最后收藏时间

  @JsonKey(name: 'last_commented_at')
  final DateTime? lastCommentedAt; // 最后评论时间

  @JsonKey(name: 'created_at')
  final DateTime? createdAt; // 统计创建时间

  @JsonKey(name: 'updated_at')
  final DateTime? updatedAt; // 统计更新时间

  // 构造函数
  Stats({
    this.postId,
    this.viewCount = 0,
    this.likeCount = 0,
    this.collectCount = 0,
    this.commentCount = 0,
    this.lastViewedAt,
    this.lastLikedAt,
    this.lastCollectedAt,
    this.lastCommentedAt,
    this.createdAt,
    this.updatedAt,
  });

  // JSON序列化和反序列化工厂方法
  factory Stats.fromJson(Map<String, dynamic> json) => _$StatsFromJson(json);
  Map<String, dynamic> toJson() => _$StatsToJson(this);

  // 重写toString方法，便于调试
  @override
  String toString() {
    return 'Stats(view: $viewCount, like: $likeCount, comment: $commentCount)';
  }
}